/**
 * *********************** ******* ***********************************
 *
 *  
 * 
 *  
 * *******************************************************************
 */

package com.arges.web.domain.tableutil;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.springframework.util.ReflectionUtils;

/**
 * 用于处理list
 *
 * 
 * @version Ver 3.0
 * @since Ver 3.0
 * @Date 2012-11-3
 *
 */
public class ListUtils
{

	@SuppressWarnings("unchecked")
	public static Object safeGetFirstRecord(List records)
	{
		Object result = null;
		if (records != null && !records.isEmpty())
		{
			result = records.get(0);
		}
		return result;
	}

	/**
	 * 
	 * 将一个list的对象里面的属性值提取出来, 放到一个list内
	 *
	 * @param objs
	 * @param attrName 属性名
	 * @param objClass 属性所在的对象的类
	 * @param returnedListClass 返回的list的对象类型
	 * @return
	 * @since Ver 3.0
	 */
	@SuppressWarnings("unchecked")
	public static List toAttrValueList(Collection objs, String attrName, Class objClass, Class returnedListClass)
	{
		Method method = EnhancedReflectionUtils.getMethodForField(objClass, attrName);
		List attrValues = new ArrayList();
		try
		{
			Constructor con = returnedListClass.getConstructor(String.class);
			for (Object obj : objs)
			{
				Object attrValue = ReflectionUtils.invokeMethod(method, obj);
				if (attrValue != null)
				{
					attrValues.add(con.newInstance(attrValue.toString()));
				}
			}
		}
		catch (Exception e)
		{

		}
		return attrValues;
	}

	/**
	 * 
	 * 获取第一个不为空的值，如果全部为空，则返回空
	 *
	 * @param <T>
	 * @param values
	 * @return
	 * @since Ver 3.0
	 */
	@SuppressWarnings("hiding")
	public static <T> T getFirstNotNullValue(T... values)
	{
		T result = null;

		for (T value : values)
		{
			if (value != null)
			{
				result = value;
				break;
			}
		}

		return result;
	}
}
